package com.greentravel.util;

import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * GUI工具类
 * 提供GUI相关的通用方法
 */
public class GUIUtil {

    // 主题色
    public static final Color PRIMARY_COLOR = new Color(46, 139, 87); // 海绿色
    public static final Color SECONDARY_COLOR = new Color(240, 248, 255); // 淡蓝色
    public static final Color WARNING_COLOR = new Color(255, 69, 0); // 红橙色
    public static final Color SUCCESS_COLOR = new Color(60, 179, 113); // 春绿色

    // 字体
    public static final Font TITLE_FONT = new Font("微软雅黑", Font.BOLD, 18);
    public static final Font SUBTITLE_FONT = new Font("微软雅黑", Font.BOLD, 16);
    public static final Font NORMAL_FONT = new Font("微软雅黑", Font.PLAIN, 14);
    public static final Font SMALL_FONT = new Font("微软雅黑", Font.PLAIN, 12);

    /**
     * 设置组件居中
     * 
     * @param component 要居中的组件
     */
    public static void centerComponent(Component component) {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (screenSize.width - component.getWidth()) / 2;
        int y = (screenSize.height - component.getHeight()) / 2;
        component.setLocation(x, y);
    }

    /**
     * 显示错误消息对话框
     * 
     * @param parentComponent 父组件
     * @param message         错误信息
     */
    public static void showErrorMessage(Component parentComponent, String message) {
        JOptionPane.showMessageDialog(parentComponent, message, "错误", JOptionPane.ERROR_MESSAGE);
    }

    /**
     * 显示信息对话框
     * 
     * @param parentComponent 父组件
     * @param message         信息内容
     */
    public static void showInfoMessage(Component parentComponent, String message) {
        JOptionPane.showMessageDialog(parentComponent, message, "提示", JOptionPane.INFORMATION_MESSAGE);
    }

    /**
     * 显示确认对话框
     * 
     * @param parentComponent 父组件
     * @param message         确认信息
     * @return 是否确认
     */
    public static boolean showConfirmDialog(Component parentComponent, String message) {
        int result = JOptionPane.showConfirmDialog(parentComponent, message, "确认", JOptionPane.YES_NO_OPTION);
        return result == JOptionPane.YES_OPTION;
    }

    /**
     * 创建自定义按钮
     * 
     * @param text 按钮文本
     * @return 自定义样式的按钮
     */
    public static JButton createButton(String text) {
        JButton button = new JButton(text);
        button.setFont(NORMAL_FONT);
        button.setBackground(PRIMARY_COLOR);
        button.setForeground(Color.WHITE);
        button.setFocusPainted(false);
        return button;
    }

    /**
     * 创建自定义标签
     * 
     * @param text 标签文本
     * @param font 字体
     * @return 自定义样式的标签
     */
    public static JLabel createLabel(String text, Font font) {
        JLabel label = new JLabel(text);
        label.setFont(font);
        return label;
    }

    /**
     * 格式化日期
     * 
     * @param date 日期
     * @return 格式化后的日期字符串
     */
    public static String formatDate(Date date) {
        if (date == null) {
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 创建带滚动条的文本区域
     * 
     * @param text    初始文本
     * @param rows    行数
     * @param columns 列数
     * @return 包含文本区域的滚动面板
     */
    public static JScrollPane createScrollTextArea(String text, int rows, int columns) {
        JTextArea textArea = new JTextArea(text, rows, columns);
        textArea.setFont(NORMAL_FONT);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        return scrollPane;
    }

    /**
     * 设置UI主题为系统默认外观
     */
    public static void setUIStyle() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}